package com.chinairi.mall.controller;


import com.chinairi.common.utils.ResponseUtil;
import com.chinairi.mall.model.Project;
import com.chinairi.mall.model.ReqModelDetail;
import com.chinairi.mall.model.ServiceOrderProject;
import com.chinairi.mall.service.IProjectService;
import com.chinairi.mall.service.IServiceOrderProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.chinairi.common.controller.BaseController;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 项目服务订单表 前端控制器
 * </p>
 *
 * @author gsl
 * @since 2020-09-15
 */
@RestController
@RequestMapping("/service-order-project")
public class ServiceOrderProjectController extends BaseController {

    @Autowired
    private IServiceOrderProjectService iServiceOrderProjectService;
    @Autowired
    private IProjectService iProjectService;

    /**
     * 获取所有项目服务订单列表
     *
     * @param serviceOrderProject
     * @throws IOException
     */
    @GetMapping("/getList")
    public void getList(ServiceOrderProject serviceOrderProject) throws IOException {
        List<ServiceOrderProject> serviceOrderProjectList = iServiceOrderProjectService.getList(serviceOrderProject);
        ResponseUtil.showMessage("success", "查询成功", serviceOrderProjectList);
    }

    /**
     * 项目表project字段pStatus和项目服务订单表SERVICE_ORDER_PROJECT中字段sopStatus同步变化，其中建立项目但未选择服务或未提交项目中心后pStatus置为0：建立项目但是未提交服务中心建立服务单；
     * 提交服务单后SERVICE_ORDER_PROJECT表中插入一条数据，同时pStatus和sopStatus同时置为1表示已提交到项目服务中心但是服务中心未接受订单；
     * 服务中心接受订单后pStatus和sopStatus同时置为2表示该项目服务单已被接受但是未选择模型；
     * 项目服务中心选择模型后pStatus和sopStatus同时置为3表示已选择模型但是未生成建议计划；
     * 项目服务中心点选生成建议计划时，跳转到页面，此时页面显示项目内容和模型中的数据，项目服务中心用户增增减减物料，点击推送建议计划后，数据插入需求计划表，pStatus和sopStatus同时置为4，表示需求建议计划已下达；
     * 若项目服务中心拒绝了该订单，将pStatus置为99，并且删除该服务单。
     *
     * 确认项目订单,服务中心接受订单后pStatus和sopStatus同时置为2表示该项目服务单已被接受但是未选择模型；
     * @param serviceOrderProject
     * @throws IOException
     */
    @PostMapping("/checkOrder")
    public void checkOrder(@RequestBody ServiceOrderProject serviceOrderProject) throws IOException {
        iServiceOrderProjectService.updateById(serviceOrderProject);
        Project project = new Project();
        project.setpId(serviceOrderProject.getpId());
        project.setpStatus(serviceOrderProject.getSopStatus() + "");
        iProjectService.updateById(project);
        ResponseUtil.showMessage("success", "确认该订单成功", "");
    }

    /**
     * 给项目服务订单选择需求模型
     * 项目服务中心选择模型后pStatus和sopStatus同时置为3表示已选择模型但是未生成建议计划；
     *
     * @param serviceOrderProject
     * @throws IOException
     */
    @PostMapping("/updateModel")
    public void updateModelId(@RequestBody ServiceOrderProject serviceOrderProject) throws IOException {
        iServiceOrderProjectService.updateById(serviceOrderProject);
        Project project = new Project();
        project.setpId(serviceOrderProject.getpId());
        project.setpStatus("3");
        iProjectService.updateById(project);
        ResponseUtil.showMessage("success", "选择需求模型成功", "");
    }

    /**
     * 拒绝服务单,将pStatus置为99，并且删除该服务单。
     * @param serviceOrderProject
     * @throws IOException
     */
    @PostMapping("/rejectOrder")
    public void rejectOrder(@RequestBody ServiceOrderProject serviceOrderProject) throws IOException {
        iServiceOrderProjectService.removeById(serviceOrderProject.getSopId());
        Project project = new Project();
        project.setpId(serviceOrderProject.getpId());
        project.setpHasService(0);
        project.setpStatus("99");
        iProjectService.updateById(project);
        ResponseUtil.showMessage("success", "该服务单已拒绝", "");
    }

    /**
     * 根据需求模型获取模型中所有的物料
     * @param modelId
     * @throws IOException
     */
    @GetMapping("/getModelList")
    public void getModelList(String modelId) throws IOException {
        List<ReqModelDetail> reqModelDetailList = iServiceOrderProjectService.getModelList(modelId);
        ResponseUtil.showMessage("success", "获取模型明细成功", reqModelDetailList);
    }

}
